package com.itheima.service.impl;

import com.itheima.dao.AnnotationHouseDao;
import com.itheima.service.AnnotationHouseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.annotation.Resources;

/**
 * spring 注解
 * @Component
 *  @Controller 表现层
 *  @Service 业务层
 *  @Repository 持久层
 *  自动注入：按数据类型去查找 AnnotationHouseDao
 *      * 如果查找到多个实现类再去spring map容器中 key 和 annotationHouseDao
 *      * 去对比 否则报错
 *      * @Autowired 和  @Qualifier  一起使用
 *      * @Resources 可以单独使用,直接按照bean的id注入， name:beanId
 *      * @Qualifier  在按照类中注入的基础上再按照名称注入
 *      * 只能注入bean对象 不能注入基本类型和集合
 * @value 注入基本数据类型和String类型
 * 改变作用范围：
 *  Scope：改变bean的作用范围
 *      value 范围的取值： singleton 单一| prototype 多例
 *
 * 和生命周期相关
 *  init | destroy
 *  PostConstruct | PreDestroy
 *
 */

//@Component(value = "houseService")
@Service(value = "houseService")
//@Repository
//@Scope(value = "singleton")
//@Scope(value = "prototype")
public class AnnotationHouseServiceImpl implements AnnotationHouseService {



//    @Autowired
//    @Qualifier("houseDao")
    @Resource(name = "houseDao")
    private AnnotationHouseDao annotationHouseDao = null;

    @PostConstruct
    public void init() {
        System.out.println("初始化方法");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("销毁方法");
    }

    @Override
    public void saveHouse() {
        annotationHouseDao.saveHouse();
    }
}
